package com.hbnu.system.core.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hbnu.system.core.model.dto.BaseTreeEntity;

import java.util.List;

/**
 * 范型类Bean处理
 */
public interface IBeanService {

    /**
     * 转换集合实例到某种类型
     *
     * @param sources     实例集合源
     * @param targetClass 目标对象
     */
    <T, E> List<T> copyListProperties(List<E> sources, Class<T> targetClass);

    <T, E> List<T> copyListProperties(List<E> sources, Class<T> targetClass, String... ignoreProperties);

    /**
     * 流遍历获取集合的树形结构
     * 根节点的parentId可以为空或者小于0
     *
     * @param nodes list
     * @return tree
     */
    <R extends BaseTreeEntity<R>> List<R> buildTree(List<R> nodes);

    /**
     * 流遍历获取集合的树形结构
     *
     * @param sourceData list
     * @return tree
     */
    <R extends BaseTreeEntity<R>> List<R> getTree(List<R> sourceData);

    /**
     * 转换IPage到某种类型 (mybatis-plus 分页对象)
     *
     * @param sources     原IPage
     * @param targetClass 目标对象
     * @return 目标IPage
     */
    <T, E> IPage<T> copyPageProperties(IPage<E> sources, Class<T> targetClass);
}
